eventcontroller: Ensure controllers stay alive during event emission
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 28 May 2014 17:39:07 +0000 (19:39 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Wed, 28 May 2014 17:39:07 +0000 (19:39 +0200)
Those might trigger the destruction of some widget that would dispose the
event controller while the event is still being handled, so keep an extra
ref on the controller during event processing.

gtk/gtkeventcontroller.c

index b674380e19be1d8c064f32aa32fffd7155a454b5..c0b828f029e215eec8196c53656a46819bacd73d 100644 (file)
@@ -205,7 +205,11 @@ gtk_event_controller_handle_event (GtkEventController *controller,
   controller_class = GTK_EVENT_CONTROLLER_GET_CLASS (controller);
 
   if (controller_class->handle_event)
-    retval = controller_class->handle_event (controller, event);
+    {
+      g_object_ref (controller);
+      retval = controller_class->handle_event (controller, event);
+      g_object_unref (controller);
+    }
 
   return retval;
 }